import unittest
import pandas
from xbd.test.ddt import ddt, data, unpack


# 运行ddt时无法单个用例执行，只能整个类运行


@ddt
class TestDDT(unittest.TestCase):
    # # 读取Excel文件
    file = r'D:\Desktop\111.xlsx'
    df = pandas.read_excel(file, sheet_name='Sheet1')
    # df = df.drop(x)  # 删除行，传参是行索引，第一行是列头不算在内，所以0是excel的第二行
    # data1=df['参数1'].tolist()#获取列名为参数1的一列数据
    # data2=df['参数2'].tolist()#获取列名为参数2的一列数据
    # data3=df.values.tolist()#以列表形式逐行读取数据
    data4 = df.to_records().tolist()  # 以列表形式逐行读取数据,包括行索引（0是excel的第二行）
    # data1 = (1,2)
    # data2 = (3,4,5)
    # data3 = [(6,7,8),(9,10,11)]
    # data4 = [(0, 7, 8), (1, 10, 11)]

# #*表示解包,将列表/元组拆分成单个元素一个个运行，有多少个元素运行多少次
#     @data(*data1)
#     def test_01(self, x):
#         print(x)
#
# #适用于多个参数，unpack时将数据按顺序拆分成对应参数入参
#     @data(data2)
#     @unpack
#     def test_02(self, x, y ,z):
#         print(x,y,z)
#
# #适用于多个元素每个元素多个参数
#     @data(*data3)
#     @unpack
#     def test_03(self, x, y ,z):
#         print(x,y,z)

# 运行用例，当运行成功时则清空行数据，留下失败或未执行的数据
    @data(*data4)
    @unpack
    def test_03(self, x, y, z):
        self.assertEqual(y, z)
        self.df.loc[x] = None  # 清空行数据，x是行索引，excel的第二行是0
        self.df.to_excel(self.file, index=False)
# 上面的操作只会清空行数据不会删除行，所以在后置条件删除所有空数据行

    @classmethod
    def tearDownClass(self):
        # 删除列表中的空值，any是只要列表中有nan就删除这一行，all当所有元素都是nan才会删除
        df = self.df.dropna(how='any')
        df.to_excel(self.file, index=False)
